package _220321;

import java.util.Scanner;

/**
 * @author ShadowLim
 * @create 2022-03-21-9:23
 */
public class 跳石头 {
    /**
     *  335ms
     */
    static int N = 50010;
    static int[] arr = new int[N];
    static int l, n, m;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        l = scanner.nextInt();
        n = scanner.nextInt();
        m = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            arr[i] = scanner.nextInt();
        }
        int left = 0, right = l;
        while (left < right) {
            int mid = left + (right - left) / 2 + 1;
            if (check(mid)) {
                left = mid;
            } else {
                right = mid - 1;
            }
        }
        System.out.println(left);
    }

    // 二分寻找答案
    // x 为最短跳跃距离的最大值
    private static boolean check(int x) {
        int last = 0;   // 记录上一块石头的最后距离
        int cnt = 0;    // 记录移除石头个数
        for (int i = 0; i < n; i++) {
            if (arr[i] - last < x) {
                cnt++;
            } else {
                last = arr[i];
            }
        }
        return cnt <= m;
    }
}
